#include<iostream>
#include "Polynomial.h"
#include "Polynomial.cpp"
#include "Spline.h"
#include "Spline.cpp"
#include "InterConditions.h"
#include<cmath>

double f(double x)
{
  return 2.0*(sqrt(x)+sqrt(3-x*x))/3;
}
double f1(double x)
{
  return 2.0*(sqrt(x)-sqrt(3-x*x))/3;
}
using namespace std;
int main()
{
  double x[40];
  double y[40];
  double l=0;
  for(int i=0;i<=10;i++)
    {
      x[i]=x[20-i]=l;
      y[i]=f(l);
      y[20-i]=f1(l);
      l+=0.17;
    }
  x[1]=0.14;y[1]=f(0.14);
  x[2]=0.4;y[2]=f(0.4);
  x[19]=0.1;y[19]=f1(0.1);
  x[18]=0.2;y[18]=f1(0.2);
  for(int i=20;i<39;i++)
    {
      x[i]=-x[39-i];
      y[i]=y[39-i];
    }
  x[39]=0;y[39]=f(0);
  vector<Vec<double,2> > p(40);
  for(int i=0;i<40;i++)
    {
      p[i][0]=x[i];
      p[i][1]=y[i];
    }
  Spline<2,4,ppForm> S(40);
  S=fitCurve<4>(p,periodic);
  double len=S.get_T();
  double k=0;
  for(int i=0;k<=len;i++)
    {
      cout<<S.s1_get_value(k)<<endl;
      k+=0.01;
    }
  return 0;
}

// int main()
// {
//   vector<double> x={1,2,3,4,6};
//   vector<double> y={0,0.6931,1.0986,1.3863,1.7918};
//   InterConditions p(5,x,y);
//   Spline<1,4,ppForm> S=interpolate<4>(p,notAknot);
//   cout<<S.s_get_value(5)<<endl;
//   cout<<S.s_get_value(6)<<endl;
//   return 0;
// }


